package com.handpay.nocardpay.baselibrary.utils;


import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.LocationManager;

import com.handpay.nocardpay.baselibrary.NoCardPayApplication;
import com.handpay.nocardpay.baselibrary.R;
import com.handpay.nocardpay.baselibrary.logutils.HPLog;
import com.handpay.nocardpay.baselibrary.permission.PermissionCode;
import com.handpay.nocardpay.baselibrary.permission.PermissionRequest;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.Permission;

import java.util.List;


/**
 * Created by lyang on 2017/8/17.
 */

public class LocationUtils {
    /**
     * 位置信息
     */
    public static final int REQUEST_CODE_PERMISSION_LOCATION = 100;

    /**
     * 判断GPS是否开启，GPS或者AGPS开启一个就认为是开启的
     *
     * @param context
     * @return true 表示开启
     */
    public static final boolean isLocationServiceOpen(Context context) {
        LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        // 通过GPS卫星定位，定位级别可以精确到街（通过24颗卫星定位，在室外和空旷的地方定位准确、速度快）
        boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        // 通过WLAN或移动网络(3G/2G)确定的位置（也称作AGPS，辅助GPS定位。主要用于在室内或遮盖物（建筑群或茂密的深林等）密集的地方定位）
        boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        return gps || network;
    }

    /**
     * 获取用户地理位置，并保存起来。 没有打开GPS，提醒用户去设置界面打开。
     *
     * @param activity,强制用户去那个界面打开;false,用户可以取消 获取到的地理位置内容，最后会存在clientEngine里面。这个方法，仅仅是请求地理位置，用在需要地理位置之前。
     *                                          如果在使用的时候，发现没有地理位置，不要影响程序的运行。
     */
    public static void requestCurrentLocation(final Activity activity) {
        if (!isLocationServiceOpen(activity)) {
            // showDialog
            String message = activity.getString(R.string.message_alert_gps);
            String title = activity.getString(R.string.tip);
            DialogInterface.OnClickListener okListener = new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    try {
                        Intent gotoGPS = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                        if (activity != null) {
                            activity.startActivity(gotoGPS);
                        }
                    } catch (ActivityNotFoundException anfe) {
                        anfe.printStackTrace();
                    }
                    dialog.dismiss();
                }
            };
            DialogUtils.showAlertDialog(activity, title, message, true, "确定", okListener);

        } else {
            if (AndPermission.hasPermission(activity,Permission.LOCATION)){
                NoCardPayApplication application = (NoCardPayApplication) activity.getApplication();
//                application.requestLocation();
                return;
            }
            PermissionRequest.onPermissionRequestCallBack callBack = new PermissionRequest.onPermissionRequestCallBack() {
                @Override
                public void permissionYes(List<String> permissions) {
                    HPLog.i(HPLog.YL_TAG,"地址权限获取成功，调用BaiduSDK获取地址:");
                    NoCardPayApplication application = (NoCardPayApplication) activity.getApplication();
//                    application.requestLocation();
                }
                @Override
                public void permissionFail(List<String> permissions) {
                    if (AndPermission.hasAlwaysDeniedPermission(activity, permissions)) {
                        // 第一种：用默认的提示语。
                        AndPermission.defaultSettingDialog(activity, PermissionCode.REQUEST_CODE_SETTING).show();
                    }
                }
            };
            PermissionRequest permissionRequest = new PermissionRequest(activity, callBack);
            permissionRequest.requestPermission(Permission.PHONE, Permission.LOCATION);
        }
    }
}
